﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Sinacor.Servico.Bovespa.Operador.Service.ServiceImplementation.Translator.DataContractToBusinessEntity
{
    public class Operador
    {
        #region ToPreferencias

        public BusinessEntity.Preferencias ToPreferencias(DataContract.Request.PreferenciasRequest from)
        {
            if (from == null) return null;

            BusinessEntity.Preferencias preferencias = new BusinessEntity.Preferencias();

            preferencias.Bolsa = from.Bolsa;
            preferencias.CodigoOperador = from.CodigoOperador;
            preferencias.Mercado = (BusinessEntity.Enum.TipoMercado?)from.Mercado;
            preferencias.Ordem = (BusinessEntity.Enum.TipoOrdem?)from.Ordem;
            preferencias.OrdemModoInsert = from.OrdemModoInsert;
            preferencias.OrdenaDigitacaoDecrescente = from.OrdenaDigitacaoDecrescente;
            preferencias.PopulaLoteAutomaticamenteAposInsercao = from.PopulaLoteAutomaticamenteAposInsercao;
            preferencias.PopulaLoteAutomaticamenteAposPreBoleto = from.PopulaLoteAutomaticamenteAposPreBoleto;
            preferencias.UtilizaDataPreBoleto = from.UtilizaDataPreBoleto;        

            return preferencias;
        }

        #endregion

        #region ToFiltroCodigoOperador

        public BusinessEntity.Parameter.FiltroCodigoOperador ToFiltroCodigoOperador(DataContract.Request.FiltroCodigoOperadorRequest from)
        {
            if (from == null) return null;

            return new BusinessEntity.Parameter.FiltroCodigoOperador
            {
                Valor = from.Valor,
                Kernel = from.Kernel                
            };
        }

        public List<BusinessEntity.Parameter.FiltroCodigoOperador> ToFiltroCodigoOperador(List<DataContract.Request.FiltroCodigoOperadorRequest> from)
        {
            if (from == null) return null;

            List<BusinessEntity.Parameter.FiltroCodigoOperador> retorno = new List<BusinessEntity.Parameter.FiltroCodigoOperador>();

            foreach (DataContract.Request.FiltroCodigoOperadorRequest item in from)
            {
                retorno.Add(new BusinessEntity.Parameter.FiltroCodigoOperador
                {
                    Valor = item.Valor,
                    Kernel = item.Kernel
                });
            }
            return retorno;
        }

        #endregion

        #region ToFiltroOperador

        public BusinessEntity.Parameter.FiltroOperador ToFiltroOperador(DataContract.Request.FiltroOperadorRequest from)
        {
            if (from == null) return null;

            return new BusinessEntity.Parameter.FiltroOperador
            {
                CodigoOperador = from.CodigoOperador,
                CodigoOperadorMegaBolsa = from.CodigoOperadorMegaBolsa,
                CodigoOperadorRendaFixa = from.CodigoOperadorRendaFixa,
                IndicadorDesprezaOperadorSinalOfertasMegaBolsa = from.IndicadorDesprezaOperadorSinalOfertasMegaBolsa,
                IndicadorOperadorHomeBroker = from.IndicadorOperadorHomeBroker,
                IndicadorPontaMesa = from.IndicadorPontaMesa,
                LoginOperador = from.LoginOperador,
                NomeOperador = from.NomeOperador,
                Bloqueado = from.Bloqueado
            };
        }

        public List<BusinessEntity.Parameter.FiltroOperador> ToFiltroOperador(List<DataContract.Request.FiltroOperadorRequest> from)
        {
            if (from == null) return null;

            List<BusinessEntity.Parameter.FiltroOperador> retorno = new List<BusinessEntity.Parameter.FiltroOperador>();

            foreach (DataContract.Request.FiltroOperadorRequest item in from)
            {
                retorno.Add(new BusinessEntity.Parameter.FiltroOperador
                {
                    CodigoOperador = item.CodigoOperador,
                    CodigoOperadorMegaBolsa = item.CodigoOperadorMegaBolsa,
                    CodigoOperadorRendaFixa = item.CodigoOperadorRendaFixa,
                    IndicadorDesprezaOperadorSinalOfertasMegaBolsa = item.IndicadorDesprezaOperadorSinalOfertasMegaBolsa,
                    IndicadorOperadorHomeBroker = item.IndicadorOperadorHomeBroker,
                    IndicadorPontaMesa = item.IndicadorPontaMesa,
                    LoginOperador = item.LoginOperador,
                    NomeOperador = item.NomeOperador,
                    Bloqueado = item.Bloqueado
                });
            }
            return retorno;
        }

        #endregion

        #region ToOperador

        public BusinessEntity.Operador ToOperador(DataContract.Request.OperadorRequest from)
        {
            if (from == null) return null;

            return new BusinessEntity.Operador
            {                
                CodigoOperador = from.CodigoOperador,
                CodigoOperadorMegaBolsa = from.CodigoOperadorMegaBolsa,
                CodigoOperadorRendaFixa = from.CodigoOperadorRendaFixa,
                IndicadorDesprezaOperadorSinalOfertasMegaBolsa = from.IndicadorDesprezaOperadorSinalOfertasMegaBolsa,
                IndicadorOperadorHomeBroker = from.IndicadorOperadorHomeBroker,
                IndicadorPontaMesa = from.IndicadorPontaMesa,
                LoginOperador = from.LoginOperador,
                NomeOperador = from.NomeOperador,
                Bloqueado = from.Bloqueado
            };
        }

        public List<BusinessEntity.Operador> ToOperador(List<DataContract.Request.OperadorRequest> from)
        {
            if (from == null) return null;

            List<BusinessEntity.Operador> retorno = new List<BusinessEntity.Operador>();

            foreach (DataContract.Request.OperadorRequest item in from)
            {
                retorno.Add(new BusinessEntity.Operador
                {
                    CodigoOperador = item.CodigoOperador,
                    CodigoOperadorMegaBolsa = item.CodigoOperadorMegaBolsa,
                    CodigoOperadorRendaFixa = item.CodigoOperadorRendaFixa,
                    IndicadorDesprezaOperadorSinalOfertasMegaBolsa = item.IndicadorDesprezaOperadorSinalOfertasMegaBolsa,
                    IndicadorOperadorHomeBroker = item.IndicadorOperadorHomeBroker,
                    IndicadorPontaMesa = item.IndicadorPontaMesa,
                    LoginOperador = item.LoginOperador,
                    NomeOperador = item.NomeOperador,
                    Bloqueado = item.Bloqueado
                });
            }
            return retorno;
        }

        #endregion

        #region ToOperadorXSubordinados

        public BusinessEntity.OperadorXSubordinados ToOperadorXSubordinados(DataContract.Request.OperadorXSubordinadosRequest from)
        {
            if (from == null) return null;

            return new BusinessEntity.OperadorXSubordinados
            {
                CodigoOperador = from.CodigoOperador,
                Subordinados = from.Subordinados
            };
        }

        #endregion

        #region ToOperadorXSubordinado

        public BusinessEntity.OperadorXSubordinado ToOperadorXSubordinado(DataContract.Request.OperadorXSubordinadoRequest from)
        {
            if (from == null) return null;

            return new BusinessEntity.OperadorXSubordinado
            {
                CodigoOperador = from.CodigoOperador,
                CodigoSubordinado = from.CodigoSubordinado
            };
        }

        #endregion

        #region ToOrigem

        public BusinessEntity.Origem ToOrigem(DataContract.Request.OrigemRequest from)
        {
            if (from == null) return null;

            return new BusinessEntity.Origem
            {
                Corretora = from.Corretora,
                OperadorOrigem = from.OperadorOrigem,
                OperadorReceptor = from.OperadorReceptor
            };
        }

        public List<BusinessEntity.Origem> ToOrigem(List<DataContract.Request.OrigemRequest> from)
        {
            if (from == null) return null;

            List<BusinessEntity.Origem> retorno = new List<BusinessEntity.Origem>();

            foreach (DataContract.Request.OrigemRequest item in from)
            {
                retorno.Add(new BusinessEntity.Origem
                {
                    Corretora = item.Corretora,
                    OperadorOrigem = item.OperadorOrigem,
                    OperadorReceptor = item.OperadorReceptor
                });
            }
            return retorno;
        }

        #endregion

        #region ToOrigemAnteriorAtual

        public BusinessEntity.OrigemAnteriorAtual ToOrigemAnteriorAtual(DataContract.Request.OrigemAnteriorAtualRequest from)
        {
            if (from == null) return null;

            return new BusinessEntity.OrigemAnteriorAtual
            {
                Anterior = new BusinessEntity.Origem()
                {
                    Corretora = from.Anterior.Corretora,
                    OperadorOrigem = from.Anterior.OperadorOrigem,
                    OperadorReceptor = from.Anterior.OperadorReceptor
                },

                Atual = new BusinessEntity.Origem()
                {
                    Corretora = from.Atual.Corretora,
                    OperadorOrigem = from.Atual.OperadorOrigem,
                    OperadorReceptor = from.Atual.OperadorReceptor
                }
            };
        }

        public List<BusinessEntity.OrigemAnteriorAtual> ToOrigemAnteriorAtual(List<DataContract.Request.OrigemAnteriorAtualRequest> from)
        {
            if (from == null) return null;

            List<BusinessEntity.OrigemAnteriorAtual> retorno = new List<BusinessEntity.OrigemAnteriorAtual>();

            foreach (DataContract.Request.OrigemAnteriorAtualRequest item in from)
            {
                retorno.Add(new BusinessEntity.OrigemAnteriorAtual
                {
                    Anterior = new BusinessEntity.Origem()
                    {
                        Corretora = item.Anterior.Corretora,
                        OperadorOrigem = item.Anterior.OperadorOrigem,
                        OperadorReceptor = item.Anterior.OperadorReceptor
                    },

                    Atual = new BusinessEntity.Origem()
                    {
                        Corretora = item.Atual.Corretora,
                        OperadorOrigem = item.Atual.OperadorOrigem,
                        OperadorReceptor = item.Atual.OperadorReceptor
                    }
                });
            }
            return retorno;
        }

        #endregion
    }
}
